package com.journaldev.thread;

/**
 * 如果一个变量是成员变量，那么多个线程对同一个对象的成员变量进行操作时，它们对该成员变量是彼此影响的
 * ，也就是说一个线程对成员变量的改变会影响到另一个线程。

　　如果一个变量是局部变量，那么每个线程都会有一个该局部变量的拷贝（即便是同一个对象中的方法的局部变量
	，也会对每一个线程有一个拷贝）
	，一个线程对该局部变量的改变不会影响到其他线程。
	
 * @author:chenhs E-mail:hson08_chen@163.com
 * Created on 2017年9月22日 下午3:59:43
 */
public class HelloThread implements Runnable {

	int i;
    // 若i是成员变量，则HelloThread的对象r只包含这一个i，两个Thread对象因为由r构造，所以共享了同一个i
    // 打印结果是0到49的数字
	
	@Override
	public void run() {
		
		// int i = 0;
        // 每一个线程都会拥有自己的一份局部变量的拷贝
        // 线程之间互不影响
        // 所以会打印100个数字，0到49每个数字都是两遍
		
		while(true) {
			System.out.println(Thread.currentThread().getName()+ "Hello number : "+ i++ );
			
			try {
				Thread.sleep((long)Math.random()*1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			if(i == 50){ 
				break;
			}
		}
		
	}

}
